//复旦 邀请赛Detection of Extraterrestrial
int flag[maxn];
int n,m;
int next[maxn];
void getnext(int len,char ar[])
{
	memset(next,0,sizeof(next));
	int i=-1;int j=-1;
	next[0]=-1;
	for(i=1; i<len ;i++)
	{
		while(j!=-1 && ar[i]!=ar[j+1])
		{
			j=next[j];
		}
		if(ar[j+1]==ar[i])
			j++;
		next[i]=j;
	}
	// len-1-next[len-1]  表示当前重复字串,
	//next[j]表示当前位可以匹配，下一位是否匹配
	//0  1  2  3  4
	//A  B  A  B  A  所以对于这个数据 (4-next[4])=2;就是重复串
	//-1 -1 0  1  2	 只不过允许最后可以出现一部分重复串
	int x,nn=len,q;
	for(i=len-1; i>=0; i--)
	{	
		x=i;
		do{
		q=i-next[x];
		if(nn%q==0 )
			flag[nn/q]=max(flag[nn/q],nn);			
		x=next[x];
		}while(x!=-1);
		nn--;
	}
}
/*
int kmp()
{
	//求t 和模式串（也就是作next）的串有多少匹配
    int j=-1,i;
    get_next();
    for(i=0;i<n;i++)
    {
       while(j!=-1&&t[j+1]!=s[i])j=next[j];
       if(t[j+1]==s[i])j++;
       if(j==m-1)
       {
          sum++;
          j=next[j];
       }
    }
    return sum;
}
*/
char ch[maxn];
int main()
{

    int i,t,j,k;int cas=1;
    scanf("%d",&t);
	while(t--)
	{
		printf("Case #%d:",cas++);
		memset(flag,0,sizeof(flag));
		scanf("%s",ch);
		int len=strlen(ch);
		for(i=0; i<strlen(ch); i++)
			getnext(len-i,&ch[i]);
		flag[1]=len;
		for(i=1; i<=len; i++)
		{
			printf(" %d",flag[i]);				
		}puts("");
	}
}
